# Kapitel 3: 
# Eigenfunktionen des beidseitig drehbar 
# gelagerten Timoshenko-Balkens (z < zg)
#  2017  Friedrich U. Mathiak, 
# mathiak@mechanik-info.de
# 
> restart: with(LinearAlgebra): unprotect(Zeta);
# 
# Fr den skizzierten Balken  mit Rechteckquerschnitt der Breite b, der Hhe h und der Lnge  sind die Eigenkreisfrequenzen und Eigenfunktionen der zeitfreien Verschiebungen W(x) und Drehwinkel (x) zu berechnen. Die ortsahngige Differenzialgleichung lautet:
> odeW:=diff(W(x),x$4)+kappa[B]^4*iy^2*(1+alpha)*diff(W(x),x$2)-kappa[B]^4*(1-kappa[B]^4*iy^4*alpha)*W(x);
# Diese gewhnliche Differenzialgleichung ist ein Folge des Separationsansatzes fr harmonische Schwingungen der Form  w(x,t) = W(x)sin(t + ) . Sie hat die Lsung:
> dsolve(odeW,W(x)): assign(%); simplify(W(x));
# Zur Verkrzung der Schreibweise fhren wir die Variable z ein:
> kappa[B]:=z/iy;
> simplify(map(eval,W(x)));
# Wir wandeln die Exponentialdarstellung noch etwas um und erhalten -jetzt mit neuen Konstanten- fr die ortsabhngige Verschiebung:
> W:=unapply(_C1*sin(lambda[1]*x)+_C2*cos(lambda[1]*x)+_C3*sinh(lambda[2]*x)+_C4*cosh(lambda[2]*x),x);
# Die Argumente 1 und 2 werden weiter unten eingefhrt. Die harmonische Schwingung selbst ist dann:
> w:= W(x)*sin(omega*t + phi);
# Mit w(x,t) = W(x)sin(t + ) ergibt sich die Ortsfunktion des Drehwinkels (x) aus der Differenzialgleichung ȴ = A/(GAS )  w  -  w zu
> PSI:=Zeta[1]*(_C1*cos(lambda[1]*x)-_C2*sin(lambda[1]*x))-Zeta[2]*(_C3*cosh(lambda[2]*x)+_C4*sinh(lambda[2]*x));
> PSIstr:=simplify(diff(PSI,x));
# Lsung des Randwertproblems: An den Balkenenden mssen jeweils  die Verschiebungen und die Biegemomente verschwinden. Das fhrt auf  das folgende lineare homogene Gleichungssystem:
> gl1:=eval(subs(x=0,W(x)));
> gl2:=eval(subs(x=0,PSIstr));
> gl3:=eval(subs(x=l,W(x)));
> gl4:=eval(subs(x=l,PSIstr));
> DA, b := GenerateMatrix([gl1,gl2,gl3,gl4],[_C1,_C2,_C3,_C4]);
> EWG:=simplify(Determinant(DA));
> GDA:=GaussianElimination(DA);
# oder
> EWG:=sin(lambda[1]*l);
# Berechnung der Integrationskonstanten. Da eine Konstante frei gewhlt werden kann, setzen wir 
> _C1:=1;
# Das verbleibende Gleichungssystem ist
> AR, b := GenerateMatrix([gl2,gl3,gl4],[_C2,_C3,_C4]);
> unb:=LinearSolve(AR,b);
# Damit sind unter Bercksichtigung von 
> sin(lambda[1]*l) = 0;
> _C2:=0: _C3:=0: _C4:=0:
# Nach dem Ersatz der Exponentialfunktionen durch trigonometrische und hyperbolische Funktionen sind  1 und 2 wie folgt zu setzen:
> lambda[1]:=sqrt(2)/2/iy*z*sqrt(sqrt(4+z^4*(alpha-1)^2)+(alpha+1)*z^2);
> lambda[2]:=sqrt(2)/2/iy*z*sqrt(sqrt(4+z^4*(alpha-1)^2)-(alpha+1)*z^2);
# und  1 und 2 sind 
> Zeta[1]:=simplify((alpha*z^4/iy^2 - lambda[1]^2)/lambda[1]);
> Zeta[2]:=simplify((alpha*z^4/iy^2 + lambda[2]^2)/lambda[2]);
# Zur Berechnung der Nullstellen zn der Eigenwertgleichung sin(1) = 0 und damit  1(z) = n/ werten wir die folgende Beziehung aus:
> zn:= simplify((1/2)*2^(3/4)*((alpha*nu^2+nu^2-sqrt(1+nu^4*(alpha-1)^2+(2*alpha+2)*nu^2)+1)*alpha^3)^(1/4)/alpha) assuming alpha > 0;
> znr:=simplify(series(zn,nu,4));
> znq:= simplify(zn^2);
> znqr:=simplify(series(znq,nu)) assuming nu >0,alpha>0;
# Im obigen Ausdruck haben wir folgende Abkrzung eingefhrt:
> nu:=n*Pi*iy/l;
# Beispiel fr einen kurzen Stahlbetonbalken ( / h = 5)
> b:=0.2; h:=0.6; A:=b*h; Iyy:=b*h^3/12; iy:=sqrt(Iyy/A); l:=3.; 
> E:=3.05E10; G:=E/2; rho:=2500.; AS:=5/6*A; alpha:=E*A/(G*AS);
# Wir stellen die Eigenwertgleichung als Funktion von z grafisch dar:
> zg:=1/alpha^(1/4);
> EWG:=unapply(EWG,z); plot(EWG(z),z=0..zg,axes=boxed,gridlines);
> Z0:=[]: a:=0.1: b:=zg: dz:=0.01: dmax:=round((b-a)/dz): za:= a: ze:=za+dz:
> for n to dmax do
>   if evalf(EWG(za)*EWG(ze)) < 0. then
>    z0:=fsolve(EWG(z),z=za..ze):
>     Z0:= [op(Z0),z0]:
>   end if:
> za:= ze; ze:=za+dz;
> end do: 
> nmax:=nops(Z0);
> ngr:=trunc(evalf(subs(z=zg,lambda[1])*l/Pi));
# Wir ermitteln die ersten nmax  Eigenkreisfrequenzen  und die Eigenfrequenzen f :
>  ZN:=Vector(nmax): OMEGAN:=Vector(nmax): FRN:=Vector(nmax): 
>  g:=sqrt(E*A/rho/Iyy):
> for n to nmax do
>   ZN[n]:=Z0[n];
>   OMEGAN[n]:=evalf(g*ZN[n]^2) ; 
>   FRN[n]   :=OMEGAN[n]/2/Pi;
> end do:
> print(`z = `,ZN,` = `,OMEGAN,`f = `, FRN);
> z:=ZN[1];
> QN:=diff(W(x),x)+PSI: MN:=l*PSIstr: Wstr:=diff(W(x),x):
> para:=x=0..l,gridlines=true,titlefont = ["ARIAL", 15],  labeldirections = ["horizontal", "vertical"], labelfont = ["HELVETICA", 10],axesfont = ["HELVETICA", "ROMAN", 8],axes=boxed:
> p1:= plot(QN  ,para,title = "\nNormierte Querkraft\n"   ,labels = ["x", "QN(x)"]):
> p2:= plot(MN  ,para,title = "\nNormiertes Biegemoment\n" ,labels = ["x", "MN(x)"]):
> p3:= plot(W(x),para,title = "\nVerschiebung\n",labels = ["x", "W(x)"]):
> p4:= plot(PSI ,para,title = "\nDrehwinkel\n"  ,labels = ["x", "(x)"]):
> plots[display](Matrix(1,4,[p1,p2,p3,p4]));
# In zwei weiteren Grafiken  stellen wir abschlieend die ersten drei Verschiebungs- und Drehwinkel-Eigenfunktionen grafisch dar:
> WX:=[]: PSIX:=[]:
> for i to 3 do 
>   z :=ZN[i];
>   WX  :=[op(WX),W(x)];
>   PSIX:=[op(PSIX),PSI(x)];
> end do:
> plot(WX,x=0..l,gridlines=true,axes=boxed,title = "\nDurchsenkungs-Eigenfunktionen\n", legend = ["Grundschwingung", "1. Oberschwingung","2. Oberschwingung"], titlefont = ["ARIAL", 15],  linestyle = [solid, dot, dash], axesfont = ["HELVETICA", "ROMAN", 8], legendstyle = [font = ["HELVETICA", 9], location =bottom],color=[black,black,black]);
> plot(PSIX,x=0..l,gridlines=true,axes=boxed,title = "\nDrehwinkel-Eigenfunktionen\n", legend = ["Grundschwingung", "1. Oberschwingung","2. Oberschwingung"], titlefont = ["ARIAL", 15],  linestyle = [solid, dot, dash], axesfont = ["HELVETICA", "ROMAN", 8], legendstyle = [font = ["HELVETICA", 9], location =bottom],color=[black,black,black]);
> 
;
> 
;
